#!/bin/bash
#
# webhook_backup.sh - 备份Git Webhook服务的配置和日志
#

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # 无颜色

# 日志函数
log_info() {
    echo -e "${BLUE}[信息]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[成功]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[警告]${NC} $1"
}

log_error() {
    echo -e "${RED}[错误]${NC} $1"
}

# 检查是否以root运行
if [[ $EUID -ne 0 ]]; then
    log_error "此脚本必须以root权限运行"
    exit 1
fi

# 设置变量
APP_DIR="$(cd "$(dirname "$0")/.." && pwd)"
BACKUP_DIR="${APP_DIR}/backups/webhook"
LOG_DIR="${APP_DIR}/logs"
CONFIG_DIR="/etc/systemd/system"
WEBHOOK_SERVICE="git-webhook.service"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="${BACKUP_DIR}/webhook_backup_${TIMESTAMP}.tar.gz"

# 确保备份目录存在
mkdir -p "${BACKUP_DIR}"
if [ ! -d "${BACKUP_DIR}" ]; then
    log_error "无法创建备份目录: ${BACKUP_DIR}"
    exit 1
fi

log_info "开始备份Webhook服务配置和日志..."

# 创建临时目录
TEMP_DIR=$(mktemp -d)
if [ ! -d "${TEMP_DIR}" ]; then
    log_error "无法创建临时目录"
    exit 1
fi

# 复制Webhook相关文件到临时目录
log_info "收集Webhook服务配置..."
mkdir -p "${TEMP_DIR}/config"
mkdir -p "${TEMP_DIR}/logs"
mkdir -p "${TEMP_DIR}/scripts"

# 备份服务配置文件
if [ -f "${CONFIG_DIR}/${WEBHOOK_SERVICE}" ]; then
    cp "${CONFIG_DIR}/${WEBHOOK_SERVICE}" "${TEMP_DIR}/config/"
    log_info "已备份系统服务配置文件"
else
    log_warn "系统服务配置文件不存在: ${CONFIG_DIR}/${WEBHOOK_SERVICE}"
fi

# 备份脚本文件
for script in git_webhook_server.py webhook_service.sh; do
    if [ -f "${APP_DIR}/scripts/${script}" ]; then
        cp "${APP_DIR}/scripts/${script}" "${TEMP_DIR}/scripts/"
        log_info "已备份脚本: ${script}"
    else
        log_warn "脚本文件不存在: ${APP_DIR}/scripts/${script}"
    fi
done

# 备份日志文件
if [ -d "${LOG_DIR}" ]; then
    find "${LOG_DIR}" -name "webhook*.log" -exec cp {} "${TEMP_DIR}/logs/" \;
    log_success "已备份Webhook日志文件"
else
    log_warn "日志目录不存在: ${LOG_DIR}"
fi

# 收集服务状态信息
if systemctl is-active --quiet ${WEBHOOK_SERVICE}; then
    systemctl status ${WEBHOOK_SERVICE} > "${TEMP_DIR}/service_status.txt"
    log_info "已收集服务状态信息"
else
    echo "服务未运行" > "${TEMP_DIR}/service_status.txt"
    log_warn "Webhook服务未运行"
fi

# 收集当前配置信息
if [ -f "${APP_DIR}/.webhook_config" ]; then
    cp "${APP_DIR}/.webhook_config" "${TEMP_DIR}/config/"
    log_info "已备份Webhook配置文件"
else
    log_warn "Webhook配置文件不存在: ${APP_DIR}/.webhook_config"
fi

# 创建备份文件
log_info "正在创建备份归档..."
tar -czf "${BACKUP_FILE}" -C "${TEMP_DIR}" .
if [ $? -eq 0 ]; then
    log_success "备份已成功创建: ${BACKUP_FILE}"
    # 清理旧备份，只保留最近10个
    ls -t "${BACKUP_DIR}"/webhook_backup_*.tar.gz | tail -n +11 | xargs -r rm
    log_info "已清理旧备份，保留最新的10个备份"
else
    log_error "创建备份归档失败"
    exit 1
fi

# 清理临时目录
rm -rf "${TEMP_DIR}"
log_info "临时文件已清理"

# 显示备份概要
BACKUP_SIZE=$(du -h "${BACKUP_FILE}" | cut -f1)
log_success "======================================"
log_success "备份完成"
log_success "备份文件: ${BACKUP_FILE}"
log_success "备份大小: ${BACKUP_SIZE}"
log_success "包含项目:"
log_success "- 系统服务配置"
log_success "- Webhook脚本"
log_success "- Webhook日志"
log_success "- 服务状态信息"
log_success "- Webhook配置"
log_success "======================================"

exit 0 